home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 722 / 722.xpi / chrome / noscript.jar / content / noscript / XPCOM.js < prev   
Text File  |  2010-02-12  |  3KB  |  106 lines

  1. const SERVICE_CID = Components.ID(SERVICE_ID);
  2.  
  3. const SERVICE_FACTORY = {
  4.   get _instance() {
  5.     delete this._instance;
  6.     var i = new SERVICE_CONSTRUCTOR();
  7.     i.__defineGetter__("home", function() {
  8.       var f = __LOCATION__.parent;
  9.       this.__defineGetter__("home", function() { return f; });
  10.       return f;
  11.     });
  12.     return this._instance = i;
  13.   },
  14.   
  15.   createInstance: function (outer, iid) {
  16.     if (outer != null)
  17.         throw Components.results.NS_ERROR_NO_AGGREGATION;
  18.  
  19.     xpcom_checkInterfaces(iid, SERVICE_IIDS, Components.results.NS_ERROR_INVALID_ARG);
  20.     return this._instance;
  21.   }
  22. };
  23.  
  24. function xpcom_generateQI(iids) {
  25.   var checks = [];
  26.   for each (var iid in iids) {
  27.     checks.push("CI." + iid.name + ".equals(iid)");
  28.   }
  29.   var src = checks.length
  30.     ? "if (" + checks.join(" || ") + ") return this;\n"
  31.     : "";
  32.   return new Function("iid", src + "throw Components.results.NS_ERROR_NO_INTERFACE;");
  33. }
  34.  
  35.  
  36. function xpcom_checkInterfaces(iid,iids,ex) {
  37.   for (var j = iids.length; j-- >0;) {
  38.     if (iid.equals(iids[j])) return true;
  39.   }
  40.   throw ex;
  41. }
  42.  
  43. var FILE = null;
  44.  
  45. var Module = {
  46.   get categoryManager() {
  47.     delete this.categoryManager;
  48.     return this.categoryManager = CC['@mozilla.org/categorymanager;1'
  49.         ].getService(CI.nsICategoryManager);
  50.   },
  51.   firstTime: true,
  52.   registerSelf: function(compMgr, fileSpec, location, type) {
  53.     if (this.firstTime) {
  54.  
  55.       FILE = fileSpec;
  56.       compMgr.QueryInterface(CI.nsIComponentRegistrar
  57.         ).registerFactoryLocation(SERVICE_CID,
  58.         SERVICE_NAME,
  59.         SERVICE_CTRID, 
  60.         fileSpec,
  61.         location, 
  62.         type);
  63.       const catman = this.categoryManager;
  64.       for (var j=0, len = SERVICE_CATS.length; j < len; j++) {
  65.         catman.deleteCategoryEntry(SERVICE_CATS[j], SERVICE_CTRID, true);
  66.         catman.addCategoryEntry(SERVICE_CATS[j],
  67.           SERVICE_CTRID, SERVICE_CTRID, true, true);
  68.       }
  69.       this.firstTime = false;
  70.       try {
  71.         if (fileSpec instanceof CI.nsILocalFile) {
  72.           fileSpec = fileSpec.parent;
  73.           fileSpec.append(".autoreg");
  74.           fileSpec.remove(false);
  75.         }
  76.       } catch(e) {}
  77.     }
  78.   },
  79.   
  80.   unregisterSelf: function(compMgr, fileSpec, location) {
  81.     compMgr.QueryInterface(CI.nsIComponentRegistrar
  82.       ).unregisterFactoryLocation(SERVICE_CID, fileSpec);
  83.     const catman = this.categoryManager;
  84.     for (var j = 0, len = SERVICE_CATS.length; j < len; j++) {
  85.       catman.deleteCategoryEntry(SERVICE_CATS[j], SERVICE_CTRID, true);
  86.     }
  87.   },
  88.  
  89.   getClassObject: function (compMgr, cid, iid) {
  90.     if (cid.equals(SERVICE_CID))
  91.       return SERVICE_FACTORY;
  92.   
  93.     if (!iid.equals(CI.nsIFactory))
  94.       throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
  95.     
  96.     throw Components.results.NS_ERROR_NO_INTERFACE;
  97.   },
  98.  
  99.   canUnload: function(compMgr) {
  100.     return true;
  101.   }
  102. }
  103. function NSGetModule(compMgr, fileSpec) {
  104.   return Module;
  105. }
  106.